package cn.lhjl.day07.note;
/*
*
* HashSet集合存储数据依赖的数据结构是哈希表
* jdk1.8之前:哈希表=数组+链表
* jdk1.8之后： 哈希表=数组+链表
*              哈希表=数组+红黑树（提高了查询的速度）
* 哈希表特点：查询快
*
* Set集合在调用add方法的时候，会调用元素的hashcode方法和equals方法，判断元素是否重复。
*
* 例如：set.add（"重地"）
* add方法会调用字符串"重地"的hashcode方法，计算出字符串"重地"的哈希值，哈希值是1179395,在集合中没有找到1179395这个哈希值
* 的元素，就会把"重地"存储到集合中。
*
* set。add（"通话"）
* add方法会调用"通话"的hashcode方法，计算字符串"通话"的哈希值，哈希值是1179395,在集合中发现有1179395这个哈希值的元素，发现
* 有哈希冲突
* "通话"会调用equals方法和哈希值相同的元素进行比较,"通话".equals("重地").返回false，两个元素哈希值相同，equals方法返回false，
* 认定两个元素不同，把"通话"存储到集合中。
*
*
* 注意：没有重写的时候，hashcode方法算出的是地址的哈希值。equals方法根据地址值来判断
* String等系统类已经重写过hashcode方法和equals方法了
*
* 但是要想用HashSet集合存储自定义的类型元素，这个自定义的类必须重写hashcode方法和equals方法。
*
*
*
*
*
*
*
*
*
*
* 这里先简述一下HashSet集合add方法的关键逻辑。它会调用存入元素的hashCode()方法，
* 计算出元素所对应在表中的位置，然后判断这个位置上是否已经有内容了。
* 如果这个位置上以及有了一个元素，那么就调用传入元素的equals()方法与已有的元素进行对比，
* 以此来判断两个元素是否相同，如果不相同，就将这个元素也存入表中。
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
* */
public class HashSet存储的数据结构哈希表 {
}
